/**
 * \file CollidingObject.h
 * \author Niels van Galen Last & Erik Kok
 * \date 01-15-08
 */
#ifndef COLLIDINGOBJECT_H
#define COLLIDINGOBJECT_H

#include "CollisionTestedObject.h"

class CollidingObject : public virtual CollisionTestedObject
{
protected:
    float Friction;
    float Bouncyness;
    float BounceVelocity;
    float ForceDependentSlip;

public:
	/// Default constructor
    CollidingObject(void) { };
	
	/// Virtual default destructor
    virtual ~CollidingObject(void) { };

	/**
	 * Get the friction value
	 * \return Friction the friction
	 */
    float GetFriction(void)         const   {return Friction;}
	
	/**
	 * Get the bouncyness value
	 * \return Bouncyness the friction
	 */
    float GetBouncyness(void)       const   {return Bouncyness;}
	
	/**
	 * Get the BounceVelocity value
	 * \return BounceVelocity the friction
	 */
    float GetBounceVelocity(void)       const   {return BounceVelocity;}
	
	/**
	 * Get the ForceDependentSlip value
	 * \return ForceDependentSlip the friction
	 */
    float GetFDS(void)          const   {return ForceDependentSlip;}

	/**
	 * Determine if there is a collision between two objects
	 * \param MineIsFirst who touches who
	 * \param Contact* does it collide
	 * \return bool returns true if the objects collide
	 */
    bool virtual Collide(bool MineIsFirst, OgreOde::Contact *Contact);

private:
    static const wchar_t* KEY_FRICTION;
    static const float DEF_FRICTION;
    static const wchar_t* KEY_BOUNCYNESS;
    static const float DEF_BOUNCYNESS;
    static const wchar_t* KEY_FDS;
    static const float DEF_FDS;
    static const wchar_t* KEY_BOUNCE_VELO;
    static const float DEF_BOUNCE_VELO;
};

#endif
